package com.zsp.coupon.service;

import com.zsp.coupon.entity.Coupon;
import com.zsp.coupon.exception.CouponException;
import com.zsp.coupon.vo.AcquireTemplateRequest;
import com.zsp.coupon.vo.CouponTemplateSDK;
import com.zsp.coupon.vo.SettlementInfo;

import java.util.List;

/**
 * 用户服务相关的接口定义
 * 1：用户三类状态优惠卷信息的展示 couponTemplate微服务的实现
 * 2：查看当前用户可用领取的优惠卷模板
 * 3：用户领取优惠卷服务
 * 4：用户消费优惠卷服务 -coupon-settlment 微服务配合实现
 */
public interface IUserService {
    /**
     * <h2>根据用户 id 和状态查询优惠券记录</h2>
     * @param userId 用户 id
     * @param status 优惠券状态
     * @return {@link Coupon}s
     * */
    List<Coupon> findCouponByStatus(Long userId,Integer status)
              throws CouponException;

    /**
     * <h2>根据用户 id 查找当前可以领取的优惠券模板</h2>
     * @param userId 用户 id
     * @return {@link CouponTemplateSDK}s
     * */
    List<CouponTemplateSDK> findAllAviaiableTemplate(Long userId)
                 throws CouponException;


    /**
     * <h2>用户领取优惠券</h2>
     * @param request {@link AcquireTemplateRequest}
     * @return {@link Coupon}
     * */

      Coupon acquireTemplate(AcquireTemplateRequest request)
                  throws CouponException;

    /**
     * 结算优惠卷
     * @param info {@link SettlementInfo}
     * @return  {@link SettlementInfo}
     * @throws CouponException
     */
    SettlementInfo  settlement(SettlementInfo info) throws CouponException;

}
